import crcmod


class CRCCalculator:
    """CRC计算工具类"""

    def __init__(self):
        # Modbus RTU使用的CRC-16多项式: 0x18005 (x^16 + x^15 + x^2 + 1)
        self.crc_func = crcmod.mkCrcFun(
            0x18005,  # 多项式
            initCrc=0xFFFF,  # 初始值
            rev=True,  # 输入数据反转
            xorOut=0x0000  # 结果异或值
        )

    def calculate(self, data):
        """计算数据的CRC值"""
        return self.crc_func(data)

    def verify(self, data, crc):
        """验证CRC是否正确"""
        calculated_crc = self.calculate(data)
        return calculated_crc == crc